package com.sugon.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
 * 模具位置关联实体
 * 表名 MODUL_POSITION_CORRELATION
 *
 * @author YuXD
 * @date 2023-02-28
 */
@NoArgsConstructor
@Data
public class ModulPositionCorrelationEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 修改人
     */
    private String updateUser;
    /**
     * 修改时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    /**
     * 删除标记
     */
    private Integer delFlag;
    /**
     * 创建人
     */
    private String createUser;
    /**
     * 创建时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    /**
     * 类型：定模、动模、上下左右滑块
     */
    private String modType;

    /**
     * 寿命标准
     */
    private Integer lifeStandard;
    /**
     * 当前次数
     */
    private Integer currentTime;

    /**
     * 套数(自动累加)：当前模具位置已换件的次数
     */
    private Integer setNum;
    /**
     * 剩余寿命：数据库不保存，根据寿命标准 - 使用次数计算得到
     */
    private Integer residualLife;
    /**
     * 最近一次更换日期，未更换时为空
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date changeTime;
    /**
     * 特殊处理，相当于滑块内容
     * 分为定模、动模、上滑块、下滑块、左滑块、右滑块
     */
    private String positionRemark;
    /**
     * 备件名称
     */
    private String positionName;

    /**
     * 芯型位置编码，必填字段
     * 取值类似：C203  21100  Z2 C106  1#等，由工厂方面提供
     */
    private String positionNo;

    /**
     * 规格，选填字段
     */
    private String spec;

    /**
     * 模具ID
     */
    private String moldId;

    /**
     * 模具分类关联位置ID
     */
    private String moldTypePosId;

    /**
     * ID
     */
    private String id;

    /**
     * 模具关联位置换件后是否同步换件时间点后的模次信息
     * 0:未同步 1:已同步
     * 只有标识"已同步"的模具关联位置才进行模次同步
     * 关键字段
     */
    private Integer isNewSyn;

    /**
     * 模具关联位置状态
     * 1：正常使用中
     * 2:换件审核中
     * 3:换件审核通过，模次待同步
     */
    private Integer posStatus;

    /**
     * 可用型芯条码列表
     * 型芯条码取值自：MODULE_SP的条码代码字段，一般为四位长度
     * 多个型芯条码间用"|"隔开，如：0010|0020|0030
     */
    private String barCodeRange;

    /**
     * 换件记录ID
     */
    private String replacePartId;

    public ModulPositionCorrelationEntity(String moldId, String moldTypePosId) {
        this.moldId = moldId;
        this.moldTypePosId = moldTypePosId;
    }

    public Integer getResidualLife() {
        if (getLifeStandard() == null) {
            return 0;
        }
        if (getCurrentTime() == null) {
            return getLifeStandard();
        }
        int residualLife = getLifeStandard() - getCurrentTime();
        return residualLife < 0 ? 0 : residualLife;
    }

    /*******************VO字段********************/
    /**
     * 模具号
     */
    private String moduleNo;

    /**
     * 模具类型ID
     */
    private String moldTypeId;

}
